//预编译宏---条件编译，避免头文件重复引用造成的重定义
#ifndef MYSTRCT_H
#define MYSTRCT_H

//将unsigned long int重命名为size_t类型
typedef long unsigned int size_t;

//学生结构体的定义
typedef struct Stuinfo
{
    int no;               //学号
    char *name;           //姓名
    float math;           //数学成绩
    float eng;            //英语成绩
    float total;          //总成绩
    struct Stuinfo *next; //next指针
    // 使用typedef将struct Stuinfo重命名为Stuinfo，将struct Stuinfo * 重命名为StuinfoPtr,将struct Stuinfo** 重命名为StuinfoList
} Stuinfo, *StuinfoPtr, **StuinfoList;

void init(StuinfoList stuList);                                 //初始化链表
void insertIntoStuList(StuinfoList stuList, const Stuinfo stu); //向链表中插入一个结点
void add(StuinfoList stuList);                                  //从控制台接收信息插入链表并写入文件
void sum(StuinfoList stuList);                                  //对数学成绩和英语成绩求和
void writetoFile(StuinfoList stuList);                          //将链表信息写入文件
void show(size_t size);                                         //读出文件信息显示
void tableHead();                                               //显示表头
void del(StuinfoList stuList, char *name);                      //删除链表信息并写入文件
void search(StuinfoList stuList, char *name);                   //通过关键字搜索并显示

#endif